package com.southminority.ethnic.pojo;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 古籍文献实体类
 * 
 * @author SouthMinority
 */
@Data
@TableName("document")
@Schema(description = "古籍文献")
public class Document implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    @Schema(description = "文献ID")
    private Long id;

    /**
     * 文献标题
     */
    @TableField("title")
    @Schema(description = "文献标题")
    private String title;

    /**
     * 原始标题
     */
    @TableField("original_title")
    @Schema(description = "原始标题")
    private String originalTitle;

    /**
     * 作者
     */
    @TableField("author")
    @Schema(description = "作者")
    private String author;

    /**
     * 朝代
     */
    @TableField("dynasty")
    @Schema(description = "朝代")
    private String dynasty;

    /**
     * 年代
     */
    @TableField("year")
    @Schema(description = "年代")
    private Integer year;

    /**
     * 地区/来源地
     */
    @TableField("region")
    @Schema(description = "地区/来源地")
    private String region;

    /**
     * 分类ID
     */
    @TableField("category_id")
    @Schema(description = "分类ID")
    private Long categoryId;

    /**
     * 文献类型
     */
    @TableField("document_type")
    @Schema(description = "文献类型")
    private String documentType;

    /**
     * 语言
     */
    @TableField("language")
    @Schema(description = "语言")
    private String language;

    /**
     * 文献描述
     */
    @TableField("description")
    @Schema(description = "文献描述")
    private String description;

    /**
     * 文献内容
     */
    @TableField("content")
    @Schema(description = "文献内容")
    private String content;

    /**
     * 内容摘要
     */
    @TableField("abstract")
    @Schema(description = "内容摘要")
    private String abstractText;

    /**
     * 原文内容
     */
    @TableField("original_content")
    @Schema(description = "原文内容")
    private String originalContent;

    /**
     * 翻译内容
     */
    @TableField("translation")
    @Schema(description = "翻译内容")
    private String translation;

    /**
     * 注释
     */
    @TableField("annotation")
    @Schema(description = "注释")
    private String annotation;

    /**
     * 来源
     */
    @TableField("source")
    @Schema(description = "来源")
    private String source;

    /**
     * 收集者
     */
    @TableField("collector")
    @Schema(description = "收集者")
    private String collector;

    /**
     * 收集日期
     */
    @TableField("collection_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Schema(description = "收集日期")
    private LocalDate collectionDate;

    /**
     * 数字化日期
     */
    @TableField("digitization_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Schema(description = "数字化日期")
    private LocalDate digitizationDate;

    /**
     * 收藏机构
     */
    @TableField("collection_institution")
    @Schema(description = "收藏机构")
    private String collectionInstitution;

    /**
     * 文献编号/索书号
     */
    @TableField("reference_code")
    @Schema(description = "文献编号/索书号")
    private String referenceCode;

    /**
     * 保存状况
     */
    @TableField("preservation_status")
    @Schema(description = "保存状况")
    private String preservationStatus;

    /**
     * 主要文件URL（支持多种格式）
     */
    @TableField("primary_file_url")
    @Schema(description = "主要文件URL（PDF/PPT/DOC等）")
    private String primaryFileUrl;

    /**
     * 主要文件类型
     */
    @TableField("primary_file_type")
    @Schema(description = "主要文件类型（pdf/ppt/doc/docx等）")
    private String primaryFileType;

    /**
     * 主要文件原始名称
     */
    @TableField("primary_file_name")
    @Schema(description = "主要文件原始名称")
    private String primaryFileName;

    /**
     * 主要文件大小（字节）
     */
    @TableField("primary_file_size")
    @Schema(description = "主要文件大小（字节）")
    private Long primaryFileSize;

    /**
     * 图片URLs（JSON格式）
     */
    @TableField("image_urls")
    @Schema(description = "图片URLs")
    private String imageUrls;

    /**
     * PDF文件URL
     */
    @TableField("pdf_url")
    @Schema(description = "PDF文件URL")
    private String pdfUrl;

    /**
     * 音频文件URL
     */
    @TableField("audio_url")
    @Schema(description = "音频文件URL")
    private String audioUrl;

    /**
     * 视频文件URL
     */
    @TableField("video_url")
    @Schema(description = "视频文件URL")
    private String videoUrl;

    /**
     * 附件文件URLs（JSON格式）
     */
    @TableField("attachment_urls")
    @Schema(description = "附件文件URLs（JSON格式，包含文件名和URL）")
    private String attachmentUrls;

    /**
     * 封面图片URL
     */
    @TableField("cover_image_url")
    @Schema(description = "封面图片URL")
    private String coverImageUrl;

    /**
     * 关键词
     */
    @TableField("keywords")
    @Schema(description = "关键词")
    private String keywords;

    /**
     * 标签
     */
    @TableField("tags")
    @Schema(description = "标签")
    private String tags;

    /**
     * 浏览次数
     */
    @TableField("view_count")
    @Schema(description = "浏览次数")
    private Integer viewCount;

    /**
     * 下载次数
     */
    @TableField("download_count")
    @Schema(description = "下载次数")
    private Integer downloadCount;

    /**
     * 是否首页展示：1-是，0-否
     */
    @TableField("is_featured")
    @Schema(description = "是否首页展示：1-是，0-否")
    private Integer isFeatured;

    /**
     * 首页展示顺序
     */
    @TableField("homepage_order")
    @Schema(description = "首页展示顺序，0表示不在首页展示")
    private Integer homepageOrder;

    /**
     * 排序
     */
    @TableField("sort_order")
    @Schema(description = "排序")
    private Integer sortOrder;

    /**
     * 状态：1-已发布，0-草稿，-1-已删除
     */
    @TableField("status")
    @Schema(description = "状态：1-已发布，0-草稿，-1-已删除")
    private Integer status;

    /**
     * 创建时间
     */
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField("update_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "更新时间")
    private LocalDateTime updateTime;
} 
